'''
7-2 还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列，要求计算该二叉树的高度。

输入格式:
输入首先给出正整数N（≤50），为树中结点总数。下面两行先后给出先序和中序遍历序列，均是长度为N的不包含重复英文字母（区别大小写）的字符串。

输出格式:
输出为一个整数，即该二叉树的高度。

输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
'''
class BinaryTree:

    def __init__(self,rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None
def buildTree(preorder,inorder):
    # 递归终止条件 树为空
    if not preorder or not inorder:
        return None

    # 根节点的值为先序遍历的第一个元素
    rootVal=preorder[0]
    # 创建根节点
    root=BinaryTree(rootVal)

    #用根节点的值去中序数组里查找对应的元素小标
    midIndex=inorder.index(rootVal)

    #找出中序遍历的左子树和右子树
    #左子树区间为 [0,midIndex] 右子树的区间为[midIndex+1,n-1]
    inorderLeft=inorder[0:midIndex]
    inorderRight=inorder[midIndex+1:]

    # 找出先序遍历的左子树和右子树
    # 先序遍历和中序遍历的左右子树长度相等，所以可以通过中序遍历的左右子树长度来确定先序遍历的左右子树
    preorderLeft=preorder[1:len(inorderLeft)+1]
    preorderRight=preorder[len(inorderLeft)+1:]

    # 递归遍历左子树
    root.leftChild=buildTree(preorderLeft,inorderLeft)
    # 递归遍历右子树
    root.rightChild=buildTree(preorderRight,inorderRight)


    return root


def maxdepth(root) :
    if not root:
        return 0
    return 1 + max(maxdepth(root.leftChild), maxdepth(root.rightChild))
N=int(input())
s1=input()
s2=input()
lt1=list(s1)
lt2=list(s2)
root=buildTree(lt1,lt2)
print(maxdepth(root))